#include<bits/stdc++.h>
using namespace std;
int main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    int t,n,m,l,v;
    int r=INT_MAX;
    int lz=INT_MIN;
    double s;
    cin>>t;
    for(int c=1;c<=t;c++)
    {
        int d1[100010];
        int v1[100010];
        int a1[100010];
        int m1[100010];
        int s1[100010];
        int mo[100010];
        bool u;
        int ans=0;
        cin>>n>>m>>l>>v;
        for(int i=1;i<=n;i++)
        {
            cin>>d1[i]>>v1[i]>>a1[i];
        }
        for(int i=1;i<=m;i++)
        {
            cin>>m1[i];
        }
        for(int i=1;i<=n;i++)
        {
            if(a1[i]<0)
            {
            s=floor((v*v-v1[i]*v1[i])/2/a1[i]);
            if((v*v-v1[i]*v1[i])%(2*a1[i])==0) s=s-1;
            }
            if(a1[i]>0&&v1[i]>v)s=0;
            if(a1[i]>0&&v1[i]<v)
            {
            s=ceil((v*v-v1[i]*v1[i])/2/a1[i]);
            if((v*v-v1[i]*v1[i])%(2*a1[i])==0) s=s+1;
            }
            if(a1[i]<0&&v1[i]<v) s=INT_MAX;
            s1[i]=s+d1[i];
        }
        sort(m1+1,m1+m+1);
        for(int i=1;i<=n;i++)
        {
            u=true;
            if(a1[i]>0)
                for(int j=1;j<=m;j++)
            {
                if(m1[j]>=s1[i])
                {
                    ans++;
                    if(s1[i]>l) lz=s1[i];
                    break;
                }
            }
            if(a1[i]<0)
                for(int j=m;j>=1;j--)
            {
                if(m1[j]<=s1[i]&&m1[j]>=d1[i]&&u)
                {
                    ans++;
                    mo[j]++;
                    u=false;
                }
            }
        }
    cout<<ans<<" ";
    cout<<"1"<<endl;
    }
}
